#pragma once
#include <string>
#include "../utils/time_tools.h"

class Client {
private:
    std::string name;       // 用户名
    std::string ip;         // IP地址
    bool is_first;          // 是否首次登录
    std::string file_path;  // 数据文件路径（可选：可用于存储默认路径）
    int login_num;          // 登录次数

public:
    TimeUtils tm;
    /**
     * 构造函数：初始化所有成员变量
     * 初始状态：未设置用户信息，登录次数为0，首次登录标记为true
     */
    Client();

    /**
     * 初始化函数：重置用户信息为初始状态
     * @return 始终返回true（可扩展为初始化失败返回false的场景）
     */
    bool init();

    /**
     * 设置用户信息（名称和IP），并更新登录次数和首次登录状态
     * @param name 用户名（非空）
     * @param ip IP地址（非空）
     * @return 成功设置返回true；若名称或IP为空，返回false
     */
    bool set_info(const std::string& name, const std::string& ip);

    /**
     * 获取用户信息字符串（包含名称、IP、登录次数等）
     * @return 格式化的用户信息字符串
     */
    std::string get_info();

    /**
     * 将用户信息保存到指定文件
     * @param file_path 目标文件路径
     * @return 保存成功返回true；文件打开失败或无用户数据时返回false
     */
    bool save(const std::string& file_path);

    /**
     * 从指定文件读取用户信息并恢复到当前对象
     * @param file_path 源文件路径
     * @return 读取成功返回true；文件打开失败或格式错误时返回false
     */
    bool read_file(const std::string& file_path);
};